package com.cskaoyan.javase.array._4exception._2null;

/**
 * @description: 空指针异常
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 正常情况下引用都会指向一个对象,但特殊情况下引用完全可能指向null(空常量)
 * 当引用指向null时,可以认为引用没有指向任何对象,指向了虚无
 * 那么这个时候,如果想要通过这个引用去操作对象,就会出现问题
 *
 * 这时程序会抛出一个异常: NullPointerException
 * java是没有指针的,但是有和指针类似的引用(引用可以看成是弱化的指针,没有指针灵活,当然也比指针安全)
 *
 * java当中的数据类型,基本数据类型只有四类八种,非常少,我们在开发中绝大多数使用的类型都是引用数据类型,这就意味着引用是存在等于null的情况,就可能产生空指针异常
 * 我们java程序员写代码的过程就是和空指针做斗争的过程,如何减少/避免空指针异常是java程序员的必修课
 *
 * 避免空指针异常最简单的方式就是if判断，判断出引用不会指向null后再使用引用操作对象
 *
 *
 * 最后再提一点：
 * **我们在开发时，要明确知道程序中的引用哪里会指向null，哪里完全不会指向null，对于：**
 * - 那些可能会指向null的引用，要在使用前慎重判断，判断不为null才能使用
 * - 那些完全不可能等于null的引用，可以适当的不做判断
 *   一旦程序抛出空指针异常，要去排查为什么引用会等于null，然后修正程序
 *
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        arr = null;
        //Condition 'arr != null' is always 'false'
        if (arr != null) System.out.println(arr.length);
        System.out.println("hello world!");
    }
}
